#ifndef _PPS_H
#define _PPS_H
#include <iostream>
#include <vector>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>


// 从 extradata 中分割 NALU（SPS/PPS）并写入
int write_sps_pps(AVFormatContext* outCtx, AVCodecContext* encCtx) {
    if (!encCtx->extradata || encCtx->extradata_size <= 0) {
        std::cerr << "编码器无 extradata（无 SPS/PPS）" << std::endl;
        return -1;
    }

    // extradata 格式：多个 NALU 拼接，每个 NALU 以 0x000001 起始码开头
    uint8_t* data = encCtx->extradata;
    int size = encCtx->extradata_size;
    int pos = 0;

    // 查找起始码并分割 NALU
    while (pos < size - 4) {
        // 查找起始码 0x000001（3字节）或 0x00000001（4字节）
        if (data[pos] == 0 && data[pos+1] == 0 && data[pos+2] == 1) {
            // 3字节起始码
            int start = pos + 3;
            pos = start;
            // 查找下一个起始码位置（作为当前 NALU 的结束）
            while (pos < size - 4) {
                if (data[pos] == 0 && data[pos+1] == 0 && (data[pos+2] == 1 || 
                   (data[pos+2] == 0 && data[pos+3] == 1))) {
                    break;
                }
                pos++;
            }
            // 计算当前 NALU 大小
            int nalu_size = pos - start;

            // 创建 AVPacket 并填充数据
            AVPacket pkt;
            av_init_packet(&pkt);
            pkt.data = data + start;
            pkt.size = nalu_size;
            pkt.stream_index = 0; // 视频流索引（假设为第0路流）
            pkt.flags |= AV_PKT_FLAG_KEY; // SPS/PPS 属于关键帧信息

            // 写入 NALU（SPS 或 PPS）
            int ret = av_interleaved_write_frame(outCtx, &pkt);
            if (ret < 0) {
                std::cerr << "写入 SPS/PPS 失败：" << av_err2str(ret) << std::endl;
                return ret;
            }
            std::cout << "成功写入 NALU（大小：" << nalu_size << " 字节）" << std::endl;
        } else {
            pos++;
        }
    }

    return 0;
}
#endif
